package com.hbnu.common.service.impl;

import com.hbnu.common.constant.DatabaseErrorCode;
import com.hbnu.common.dao.UserDao;
import com.hbnu.common.response.ServiceResponse;
import com.hbnu.common.service.RegisterService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.SQLException;

/**
 * {@inheritDoc}
 * <p>
 * 该实现类依赖 {@link UserDao} 执行用户数据持久化操作，
 * 并通过捕获数据库唯一键冲突异常，处理用户名重复的业务场景。
 */
public class RegisterServiceImpl implements RegisterService {
    private static final Logger logger = LoggerFactory.getLogger(RegisterServiceImpl.class);
    private final UserDao userDao;

    /**
     * 构造函数，注入UserDao依赖
     *
     * @param userDao 用户数据访问对象，用于执行数据库操作
     */
    public RegisterServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public ServiceResponse<Void> handleRegister(String username, String password) {
        return handleRegister(username, password, null);
    }

    @Override
    public ServiceResponse<Void> handleRegister(String username, String password, String nickName) {
        try {
            userDao.addUser(username, password, nickName);
            logger.info("用户注册成功：用户名={}", username);
            return ServiceResponse.success("注册成功");
        } catch (SQLException e) {
            if (e.getErrorCode() == DatabaseErrorCode.MYSQL_DUPLICATE_KEY_PRIMARY) {
                logger.warn("用户注册失败：用户名={}（用户名重复）", username);
                return ServiceResponse.fail("用户名 '" + username + "' 已被注册");
            } else {
                logger.error("注册异常：用户名={}，异常信息={}", username, e.getMessage(), e);
                return ServiceResponse.fail("系统繁忙");
            }
        }
    }
}
